/**
 * Copyright(c) 2014 Xunton Solutions
 *
 * History:
 *   15-1-15 下午6:48 Created by dwzhang
 */
package com.jade.modules.cms;

import java.util.List;
import java.util.Map;

import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;

/**
 * 内容管理接口。
 *
 * @author <a href="mailto:dwzhang@xunton.com">dwzhang</a> 
 * @version 1.0 15-1-15 下午6:48
 */
public interface ContentManager
{
    /**
     * 创建内容。
     *
     * @param operatorType 操作者类型
     * @param operator 操作者
     * @param content 内容信息。
     * @throws CmsException 处理异常。
     */
    public void create(String operatorType, String operator, Content content)
            throws CmsException;

    /**
     * 更新内容.
     *
     * @param operatorType 操作者类型
     * @param operator 操作者
     * @param content 内容信息。
     * @throws CmsException 处理异常
     */
    public void update(String operatorType, String operator, Content content)
            throws CmsException;

    /**
     * 提交内容去审核，只针对新建的内容。
     *
     * @param operatorType 操作者类型
     * @param operator 操作者
     * @param contentIds 内容标识
     * @param remark 提交说明
     * @throws CmsException 处理异常。
     */
    public void submit(String operatorType, String operator, long[] contentIds, String remark)
            throws CmsException;

    /**
     * 审核内容。只针对已提交审核以及在审核过程中的内容。
     *
     * @param operatorType 操作者类型
     * @param operator 操作者
     * @param contentIds 内容标识
     * @param result 审核结果
     * @param remark 审核说明
     * @throws CmsException 处理异常。
     */
    public void audit(String operatorType, String operator, long[] contentIds, boolean result,
                      String remark)
            throws CmsException;

    /**
     * 发布内容。只针对所有审核过程都完成的内容。
     *
     * @param operatorType 操作者类型
     * @param operator 操作者
     * @param contentIds 内容标识。
     * @param remark 发布说明
     * @throws CmsException 处理异常
     */
    public void publish(String operatorType, String operator, long[] contentIds, String remark)
            throws CmsException;

    /**
     * 发布撤回。只针对已发布的内容。
     *
     * @param operatorType 操作者类型
     * @param operator 操作者
     * @param contentIds 内容标识。
     * @param remark 撤回说明。
     * @throws CmsException 处理异常。
     */
    public void withdraw(String operatorType, String operator, long[] contentIds, String remark)
            throws CmsException;

    /**
     * 重新提交内容。只有审核拒绝、发布撤回、已审核状态的内容可以执行该操作。
     *
     * @param operatorType 操作者类型
     * @param operator 操作者
     * @param contentIds 内容标识。
     * @throws CmsException 处理异常
     */
    public void reopen(String operatorType, String operator, long[] contentIds, String remark)
            throws CmsException;

    /**
     * 删除内容。
     *
     * @param operatorType 操作者类型
     * @param operator 操作者
     * @param ids 内容标识
     * @throws CmsException 处理异常。
     */
    public void remove(String operatorType, String operator, long[] ids, String remark)
            throws CmsException;

    public void updateFocus(String operatorType, String operator, long[] ids, boolean focus, String remark)
            throws CmsException;

    public void updateSortCode(String operatorType, String operator, Map<Long, Integer> levelMap, String remark)
            throws CmsException;

    /**
     *  获取内容详细信息。
     *
     * @param id 内容标识
     * @return 内容信息对象
     */
    public Content get(long id);

    /**
     * 获取内容的完整内容。
     */
    public String mergeContent(long id)
            throws CmsException;

    /**
     * 根据条件列出内容。
     *
     * @param criteria 查询条件
     * @return 内容列表
     */
    public List<Content> list(Criteria criteria);

    /**
     * 根据条件分页列出内容。
     *
     * @param criteria 查询条件
     * @return 内容列表。
     */
    public PagingList<Content> query(Criteria criteria);
}
